#ifndef CDDS_H
#define CDDS_H

struct CDomainParticipantFactory;
CDomainParticipantFactory* get_instance();

struct CDomainParticipant;

// factory
#define DOMAIN_PARTICIPANT_FACTORY_FIELDS() \
	CDomainParticipant* (*create_participant)(CDomainParticipantFactory* self); \
	void   (*delete_participant)(CDomainParticipantFactory* self, CDomainParticipant* component)

struct CDomainParticipantFactory {
	DOMAIN_PARTICIPANT_FACTORY_FIELDS();
};


// participant
struct CPublisher;
struct CQosPolicy;
struct CPublisherListener;
struct CStatusKind;

#define DOMAIN_PARTICIPANT_FIELDS() \
	CPublisher* (*create_publisher)(CDomainParticipant* self, CQosPolicy* qos_list, CPublisherListener* listener, CStatusKind* mask)

struct CDomainParticipant
{
	DOMAIN_PARTICIPANT_FIELDS(); 
};


CDomainParticipant* create_participant(CDomainParticipantFactory* self);

void delete_participant(CDomainParticipantFactory* self, CDomainParticipant* component);

CPublisher* create_publisher(CDomainParticipant* self, CQosPolicy* qos_list, CPublisherListener* listener, CStatusKind* mask);

// publisher

struct CPublisher
{
};

#endif 